from qiniu import Auth, put_data
from django.conf import settings

class QiniuUploader:
    def __init__(self):
        self.access_key = settings.QINIU_ACCESS_KEY  # 七牛云 AK，需配置到 settings.py
        self.secret_key = settings.QINIU_SECRET_KEY  # 七牛云 SK，需配置到 settings.py
        self.bucket_name = settings.QINIU_BUCKET_NAME  # 存储空间名，需配置到 settings.py
        self.q = Auth(self.access_key, self.secret_key)

    def upload(self, file_data, file_name):
        """
        上传文件到七牛云
        :param file_data: 图片二进制数据（如 request.FILES['file'].read() ）
        :param file_name: 自定义存储的文件名（可含路径，如 'teacher/xxx.jpg' ）
        :return: 七牛云返回的文件 key（即访问路径的一部分 ）
        """
        token = self.q.upload_token(self.bucket_name)
        ret, info = put_data(token, file_name, file_data)
        if info.status_code == 200:
            return ret.get('key')
        raise Exception(f"七牛云上传失败: {info.response}")